home *** CD-ROM | disk | FTP | other *** search
- 900 ' THIS PROGRAM CAN BE FOUND IN THE OCT.'82 ISSUE OF CREATIVE COMPUTING.
- 910 '
- 1000 ' GPRINT - Graphics Dump Program for the IBM Personal Computer
- 1010 ' Will Fastie -- Original version Feb 82, revised June 82
- 1020 '
- 1030 ' This priogram transfers the contents of the Color/Graphics Adapter
- 1040 ' memory to a GRAFTRAX-80 or GRAFTRAX-Plus equipped IBM 80 CPS or
- 1050 ' EPSON MX-80 printer, to an EPSON MX-100 printer, or to a new
- 1060 ' generation EPSON MX-80 OR 100 printer (for which GRAFTRAX-Plus is a
- 1070 ' standard feature). Medium resolution images (200 x 320) are
- 1080 ' converted, whether in black and white or in color. Color
- 1090 ' images, which can be displayed using a 4 color set, are printed
- 1100 ' in black and white.
- 1110 '
- 1120 ' The program assumes that the program is executed on a machine
- 1130 ' equipped with the Color/Graphics Adapter only. If both
- 1140 ' display adapters are present, switch to the Color/Graphics
- 1150 ' adapter first, then run this program.
- 1160 '
- 1170 ' -- GLOBAL program declarations
- 1190 DIM PIN.MASKS(8)
- 1200 FOR PIN = 0 TO 7
- 1210 PIN.MASKS(PIN) = 2^(7-PIN)
- 1220 NEXT PIN
- 1230 ESC = 27
- 1240 CR =13
- 1250 '
- 1260 ' This section should be written to suit you particular needs. For
- 1270 ' demonstration purposes, it loads a previously stored image form the
- 1280 ' disk into memory of the Color/Graphics Adapter. You could
- 1290 ' generate the image here instead.
- 1300 '
- 1310 KEY OFF: CLS
- 1320 INPUT "Enter filename of image: ",F$
- 1330 SCREEN 1,0 'Medium resolution, color enabled
- 1340 DEF SEG = &HB800 'Base address of CG/A memory
- 1350 BLOAD F$, 0
- 1360 '
- 1370 ' This section converts the image in memory to a numeric array
- 1380 ' containing the information required for the printer
- 1390 '
- 1400 ' -- Declar an array to hold the data
- 1410 NR.ROWS = 200: NR.COLS = 320
- 1420 ROWS.PER.PRINTED.LINE = 8
- 1430 NR.LINES = NR.ROWS/ROWS.PER.PRINTED.LINE
- 1440 DIM LINES(NR.LINES, NR.COLS)
- 1450 '
- 1460 ' -- Initialize the array to 0
- 1470 FOR L = 0 TO NR.LINES-1
- 1480 FOR COL = 0 TO NR.COLS-1
- 1490 LINES(L, COL) = 0
- 1500 NEXT COL
- 1510 NEXT L
- 1520 '
- 1530 ' This section reads each point form the video memory, translates
- 1540 ' the points to a black and white representaion, and builds
- 1550 ' the data for the printer.
- 1560 ' The ROW and COL variables are used to calculate the position in
- 1570 ' which the point value should be placed. The positions 0 through 7
- 1580 ' represent the printer's print head pins, from top to bottom. The
- 1590 ' value in each position in the array corresponds to these pin
- 1600 ' positions. 1610 '
- 1620 FOR ROW = 0 TO NR.ROWS-1
- 1630 L = ROW\ROWS.PER.PRINTED.LINE
- 1640 FOR COL = 0 TO NR.COLS-1
- 1650 IF POINT(COL, ROW) = 0 THEN GOTO 1670
- 1660 LINES(L, COL) = LINES(L, COL) OR PIN.MASKS(ROW MOD 8)
- 1670 NEXT COL
- 1680 BEEP
- 1690 NEXT ROW
- 1700 '
- 1710 ' This section prints the data by line to the printer. No assumption
- 1720 ' is made about the position of the paper.
- 1730 '
- 1740 GOSUB 2110
- 1750 FOR L = 0 TO NR.LINES-1 'establish line spacing
- 1760 N = NR.COLS: GOSUB 2170 'put printer in graphics mode
- 1770 FOR COL = 0 TO NR.COLS-1
- 1780 C = LINES(L, COL): GOSUB 2000
- 1790 NEXT COL
- 1800 C = CR: GOSUB 2000 'advance the paper
- 1810 NEXT L
- 1820 LPRINT: LPRINT 'space between this and next
- 1830 '
- 1840 END
- 1850 '
- 1860 ' This routine transmits the value in C to the printer.
- 1870 ' A routine like this is necessary because PRINT in BASIC interprets
- 1880 ' some characters, and therefore connot transmit arbitrary values.
- 1890 '
- 1900 ' This program uses the Printer Port on the IBM Monochrome Display
- 1910 ' and Parallel Printer Adapter. If you just have the Printer Adapter,
- 1920 ' you must change the port values in this routine according to this table.
- 1930 '
- 1940 ' Port Name MD & PPA Just PPA
- 1950 ' --------- -------- --------
- 1960 ' DATA in/out &H3BC &H378
- 1970 ' Printer Latch &H3BE &H37A
- 1980 ' Status Register &H3BD &H379
- 1990 '
- 2000 OUT &H3BE, &H6
- 2010 IF INP(&H3BD) <> &HDF THEN 2010
- 2020 OUT &H3BC, C
- 2030 OUT &H3BE, &H3F
- 2040 IF INP(&H3BD) <> &HDF THEN 2040
- 2050 RETURN
- 2060 '
- 2070 ' Subroutine to set line spacing to 8/72 of and inch. Subsequent
- 2080 ' to this command, the printer moves the paper by this amount
- 2090 ' whenever a Carriage Return (13) is received.
- 2100 '
- 2110 C = ESC: GOSUB 2000: C = ASC("A"): GOSUB 2000: C = 8: GOSUB 2000
- 2120 RETURN
- 2130 '
- 2140 ' Subroutine to command the printer to consider the next N characters
- 2150 ' as Bit Image Graphics data.
- 2160 '
- 2170 C = ESC: GOSUB 2000: C = ASC("K"): GOSUB 2000
- 2180 IF N > 255 THEN C = N-256: GOSUB 2000: C = 1: GOSUB 2000 ELSE C = N: GOSUB 2000: C = 0: GOSUB 2000
- 2190 RETURN
- 6: GOSUB 2000: C = 1: GOSUB 2000